package com.lnsoft.cac.server.handle.codec.frameMessage;


import com.lnsoft.cac.server.util.Arrays16;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.Data;
import lombok.NonNull;

import java.util.Arrays;

import static com.lnsoft.cac.server.handle.codec.frameMessage.Util.byteArrToString;

@Data
/**
 * 配置/状态交互---监测仪通信参数
 * */
public class Cfg_CommArg_Cfm {
    private int Command_Status;             //1byte     数据发送状态：①0xFF成功②0x00失败
    private int Request_Flag;               //1byte     标识位：标识选择请求或设置有效的参数项，如：0x01表示终端上行通信工作方式数据项有效。
    private int Uplink_Type;                //1byte     终端上行通信工作方式：①0x00无线专网②0x02 短信息
    private String APN;                     //16byte    无线通信APN(字符串)
    private String APN_UserName;            //21byte    APN用户名(字符串) （无线专网使用）
    private String APN_Password;            //21byte    APN密码(字符串) （无线专网使用）
    private int Heart_Beat_Cycle;           //1byte     心跳间隔
    private String Message_Centor;          //20byte    短信中心号码（字符串）

//
//    public ByteBuf toByteBuf() throws Exception {
//        if (Command_Status != (byte)0xFF && Command_Status != (byte)0x00) {
//            throw new Exception("数据发送状态 设置异常");
//        }
//        if (Uplink_Type != (byte)0x00 && Uplink_Type != (byte)0x02) {
//            throw new Exception("终端上行通信工作方式 设置异常");
//        }
//        if (APN == null) {
//            APN = new byte[16];
//        }
//        if (APN.length != 16) {
//            throw new Exception("无线通信APN 设置异常");
//        }
//        if (APN_UserName == null) {
//            APN_UserName = new byte[21];
//        }
//        if (APN_UserName.length != 21) {
//            throw new Exception("APN用户名 设置异常");
//        }
//        if (APN_Password == null) {
//            APN_Password = new byte[21];
//        }
//        if (APN_Password.length != 21) {
//            throw new Exception("APN密码 设置异常");
//        }
//        if (Message_Centor == null) {
//            Message_Centor = new byte[20];
//        }
//        if (Message_Centor.length != 20) {
//            throw new Exception("短信中心号码 设置异常");
//        }
//
//        ByteBuf bf = Unpooled.buffer(82);
//        bf.writeByte(Command_Status);
//        bf.writeByte(Request_Flag);
//        bf.writeByte(Uplink_Type);
//        bf.writeBytes(APN);
//        bf.writeBytes(APN_UserName);
//        bf.writeBytes(APN_Password);
//        bf.writeByte(Heart_Beat_Cycle);
//        bf.writeBytes(Message_Centor);
//        return bf;
//    }



    //  解析 { 配置/状态交互---监测仪通信参数--确认 } 帧报文内容区 到消息体中
    public static Cfg_CommArg_Cfm decFrameBody(@NonNull byte[] frameBody) throws Exception {
        ByteBuf bf = Unpooled.wrappedBuffer(frameBody);
        Cfg_CommArg_Cfm msg = new Cfg_CommArg_Cfm();
        int len = frameBody.length;
        if (len == 0) {
            return null;
        }
        if (len != 82) {
            throw new Exception("frameBody 数据异常");
        }
        msg.setCommand_Status(bf.getByte(0) & 0xFF);

        msg.setRequest_Flag(bf.getByte(1) & 0xFF);

        msg.setUplink_Type(bf.getByte(2) & 0xFF);

        byte[] APN = new byte[16];
        bf.getBytes(3, APN);
        msg.setAPN(byteArrToString(APN).trim());

        byte[] APN_UserName = new byte[21];
        bf.getBytes(19, APN_UserName);
        msg.setAPN_UserName(byteArrToString(APN_UserName).trim());

        byte[] APN_Password = new byte[21];
        bf.getBytes(40, APN_Password);
        msg.setAPN_Password(byteArrToString(APN_Password).trim());

        msg.setHeart_Beat_Cycle(bf.getByte(61) & 0xFF);

        byte[] Message_Centor = new byte[20];
        bf.getBytes(62, Message_Centor);
        msg.setMessage_Centor(byteArrToString(Message_Centor).trim());

        return msg;
    }

}
